/*
 * Flowable CMMN REST API
 * # flowable / flowəb(ə)l /    - a compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.  - a lightning fast, tried and tested BPMN 2 process engine written in Java. It is Apache 2.0 licensed open source, with a committed community.  - can run embedded in a Java application, or as a service on a server, a cluster, and in the cloud. It integrates perfectly with Spring. With a rich Java and REST API, it is the ideal engine for orchestrating human or system activities.
 *
 * OpenAPI spec version: v1
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */


package com.ibm.risk.irmp.workflow.client.flowable.model;

import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * ModelCase
 */

public class ModelCase {
  @JsonProperty("id")
  private String id = null;

  @JsonProperty("xmlRowNumber")
  private Integer xmlRowNumber = null;

  @JsonProperty("xmlColumnNumber")
  private Integer xmlColumnNumber = null;

  @JsonProperty("extensionElements")
  private Map<String, List<ExtensionElement>> extensionElements = null;

  @JsonProperty("attributes")
  private Map<String, List<ExtensionAttribute>> attributes = null;

  @JsonProperty("documentationTextFormat")
  private String documentationTextFormat = null;

  @JsonProperty("documentation")
  private String documentation = null;

  @JsonProperty("name")
  private String name = null;

  @JsonProperty("initiatorVariableName")
  private String initiatorVariableName = null;

  @JsonProperty("planModel")
  private Stage planModel = null;

  @JsonProperty("startEventType")
  private String startEventType = null;

  @JsonProperty("candidateStarterUsers")
  private List<String> candidateStarterUsers = null;

  @JsonProperty("candidateStarterGroups")
  private List<String> candidateStarterGroups = null;

  @JsonProperty("allCaseElements")
  private Map<String, CaseElement> allCaseElements = null;

  @JsonProperty("lifecycleListeners")
  private List<FlowableListener> lifecycleListeners = null;

  public ModelCase id(String id) {
    this.id = id;
    return this;
  }

   /**
   * Get id
   * @return id
  **/
  @ApiModelProperty(value = "")
  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public ModelCase xmlRowNumber(Integer xmlRowNumber) {
    this.xmlRowNumber = xmlRowNumber;
    return this;
  }

   /**
   * Get xmlRowNumber
   * @return xmlRowNumber
  **/
  @ApiModelProperty(value = "")
  public Integer getXmlRowNumber() {
    return xmlRowNumber;
  }

  public void setXmlRowNumber(Integer xmlRowNumber) {
    this.xmlRowNumber = xmlRowNumber;
  }

  public ModelCase xmlColumnNumber(Integer xmlColumnNumber) {
    this.xmlColumnNumber = xmlColumnNumber;
    return this;
  }

   /**
   * Get xmlColumnNumber
   * @return xmlColumnNumber
  **/
  @ApiModelProperty(value = "")
  public Integer getXmlColumnNumber() {
    return xmlColumnNumber;
  }

  public void setXmlColumnNumber(Integer xmlColumnNumber) {
    this.xmlColumnNumber = xmlColumnNumber;
  }

  public ModelCase extensionElements(Map<String, List<ExtensionElement>> extensionElements) {
    this.extensionElements = extensionElements;
    return this;
  }

  public ModelCase putExtensionElementsItem(String key, List<ExtensionElement> extensionElementsItem) {
    if (this.extensionElements == null) {
      this.extensionElements = new HashMap<String, List<ExtensionElement>>();
    }
    this.extensionElements.put(key, extensionElementsItem);
    return this;
  }

   /**
   * Get extensionElements
   * @return extensionElements
  **/
  @ApiModelProperty(value = "")
  public Map<String, List<ExtensionElement>> getExtensionElements() {
    return extensionElements;
  }

  public void setExtensionElements(Map<String, List<ExtensionElement>> extensionElements) {
    this.extensionElements = extensionElements;
  }

  public ModelCase attributes(Map<String, List<ExtensionAttribute>> attributes) {
    this.attributes = attributes;
    return this;
  }

  public ModelCase putAttributesItem(String key, List<ExtensionAttribute> attributesItem) {
    if (this.attributes == null) {
      this.attributes = new HashMap<String, List<ExtensionAttribute>>();
    }
    this.attributes.put(key, attributesItem);
    return this;
  }

   /**
   * Get attributes
   * @return attributes
  **/
  @ApiModelProperty(value = "")
  public Map<String, List<ExtensionAttribute>> getAttributes() {
    return attributes;
  }

  public void setAttributes(Map<String, List<ExtensionAttribute>> attributes) {
    this.attributes = attributes;
  }

  public ModelCase documentationTextFormat(String documentationTextFormat) {
    this.documentationTextFormat = documentationTextFormat;
    return this;
  }

   /**
   * Get documentationTextFormat
   * @return documentationTextFormat
  **/
  @ApiModelProperty(value = "")
  public String getDocumentationTextFormat() {
    return documentationTextFormat;
  }

  public void setDocumentationTextFormat(String documentationTextFormat) {
    this.documentationTextFormat = documentationTextFormat;
  }

  public ModelCase documentation(String documentation) {
    this.documentation = documentation;
    return this;
  }

   /**
   * Get documentation
   * @return documentation
  **/
  @ApiModelProperty(value = "")
  public String getDocumentation() {
    return documentation;
  }

  public void setDocumentation(String documentation) {
    this.documentation = documentation;
  }

  public ModelCase name(String name) {
    this.name = name;
    return this;
  }

   /**
   * Get name
   * @return name
  **/
  @ApiModelProperty(value = "")
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public ModelCase initiatorVariableName(String initiatorVariableName) {
    this.initiatorVariableName = initiatorVariableName;
    return this;
  }

   /**
   * Get initiatorVariableName
   * @return initiatorVariableName
  **/
  @ApiModelProperty(value = "")
  public String getInitiatorVariableName() {
    return initiatorVariableName;
  }

  public void setInitiatorVariableName(String initiatorVariableName) {
    this.initiatorVariableName = initiatorVariableName;
  }

  public ModelCase planModel(Stage planModel) {
    this.planModel = planModel;
    return this;
  }

   /**
   * Get planModel
   * @return planModel
  **/
  @ApiModelProperty(value = "")
  public Stage getPlanModel() {
    return planModel;
  }

  public void setPlanModel(Stage planModel) {
    this.planModel = planModel;
  }

  public ModelCase startEventType(String startEventType) {
    this.startEventType = startEventType;
    return this;
  }

   /**
   * Get startEventType
   * @return startEventType
  **/
  @ApiModelProperty(value = "")
  public String getStartEventType() {
    return startEventType;
  }

  public void setStartEventType(String startEventType) {
    this.startEventType = startEventType;
  }

  public ModelCase candidateStarterUsers(List<String> candidateStarterUsers) {
    this.candidateStarterUsers = candidateStarterUsers;
    return this;
  }

  public ModelCase addCandidateStarterUsersItem(String candidateStarterUsersItem) {
    if (this.candidateStarterUsers == null) {
      this.candidateStarterUsers = new ArrayList<String>();
    }
    this.candidateStarterUsers.add(candidateStarterUsersItem);
    return this;
  }

   /**
   * Get candidateStarterUsers
   * @return candidateStarterUsers
  **/
  @ApiModelProperty(value = "")
  public List<String> getCandidateStarterUsers() {
    return candidateStarterUsers;
  }

  public void setCandidateStarterUsers(List<String> candidateStarterUsers) {
    this.candidateStarterUsers = candidateStarterUsers;
  }

  public ModelCase candidateStarterGroups(List<String> candidateStarterGroups) {
    this.candidateStarterGroups = candidateStarterGroups;
    return this;
  }

  public ModelCase addCandidateStarterGroupsItem(String candidateStarterGroupsItem) {
    if (this.candidateStarterGroups == null) {
      this.candidateStarterGroups = new ArrayList<String>();
    }
    this.candidateStarterGroups.add(candidateStarterGroupsItem);
    return this;
  }

   /**
   * Get candidateStarterGroups
   * @return candidateStarterGroups
  **/
  @ApiModelProperty(value = "")
  public List<String> getCandidateStarterGroups() {
    return candidateStarterGroups;
  }

  public void setCandidateStarterGroups(List<String> candidateStarterGroups) {
    this.candidateStarterGroups = candidateStarterGroups;
  }

  public ModelCase allCaseElements(Map<String, CaseElement> allCaseElements) {
    this.allCaseElements = allCaseElements;
    return this;
  }

  public ModelCase putAllCaseElementsItem(String key, CaseElement allCaseElementsItem) {
    if (this.allCaseElements == null) {
      this.allCaseElements = new HashMap<String, CaseElement>();
    }
    this.allCaseElements.put(key, allCaseElementsItem);
    return this;
  }

   /**
   * Get allCaseElements
   * @return allCaseElements
  **/
  @ApiModelProperty(value = "")
  public Map<String, CaseElement> getAllCaseElements() {
    return allCaseElements;
  }

  public void setAllCaseElements(Map<String, CaseElement> allCaseElements) {
    this.allCaseElements = allCaseElements;
  }

  public ModelCase lifecycleListeners(List<FlowableListener> lifecycleListeners) {
    this.lifecycleListeners = lifecycleListeners;
    return this;
  }

  public ModelCase addLifecycleListenersItem(FlowableListener lifecycleListenersItem) {
    if (this.lifecycleListeners == null) {
      this.lifecycleListeners = new ArrayList<FlowableListener>();
    }
    this.lifecycleListeners.add(lifecycleListenersItem);
    return this;
  }

   /**
   * Get lifecycleListeners
   * @return lifecycleListeners
  **/
  @ApiModelProperty(value = "")
  public List<FlowableListener> getLifecycleListeners() {
    return lifecycleListeners;
  }

  public void setLifecycleListeners(List<FlowableListener> lifecycleListeners) {
    this.lifecycleListeners = lifecycleListeners;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ModelCase _case = (ModelCase) o;
    return Objects.equals(this.id, _case.id) &&
        Objects.equals(this.xmlRowNumber, _case.xmlRowNumber) &&
        Objects.equals(this.xmlColumnNumber, _case.xmlColumnNumber) &&
        Objects.equals(this.extensionElements, _case.extensionElements) &&
        Objects.equals(this.attributes, _case.attributes) &&
        Objects.equals(this.documentationTextFormat, _case.documentationTextFormat) &&
        Objects.equals(this.documentation, _case.documentation) &&
        Objects.equals(this.name, _case.name) &&
        Objects.equals(this.initiatorVariableName, _case.initiatorVariableName) &&
        Objects.equals(this.planModel, _case.planModel) &&
        Objects.equals(this.startEventType, _case.startEventType) &&
        Objects.equals(this.candidateStarterUsers, _case.candidateStarterUsers) &&
        Objects.equals(this.candidateStarterGroups, _case.candidateStarterGroups) &&
        Objects.equals(this.allCaseElements, _case.allCaseElements) &&
        Objects.equals(this.lifecycleListeners, _case.lifecycleListeners);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, xmlRowNumber, xmlColumnNumber, extensionElements, attributes, documentationTextFormat, documentation, name, initiatorVariableName, planModel, startEventType, candidateStarterUsers, candidateStarterGroups, allCaseElements, lifecycleListeners);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ModelCase {\n");

    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    xmlRowNumber: ").append(toIndentedString(xmlRowNumber)).append("\n");
    sb.append("    xmlColumnNumber: ").append(toIndentedString(xmlColumnNumber)).append("\n");
    sb.append("    extensionElements: ").append(toIndentedString(extensionElements)).append("\n");
    sb.append("    attributes: ").append(toIndentedString(attributes)).append("\n");
    sb.append("    documentationTextFormat: ").append(toIndentedString(documentationTextFormat)).append("\n");
    sb.append("    documentation: ").append(toIndentedString(documentation)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    initiatorVariableName: ").append(toIndentedString(initiatorVariableName)).append("\n");
    sb.append("    planModel: ").append(toIndentedString(planModel)).append("\n");
    sb.append("    startEventType: ").append(toIndentedString(startEventType)).append("\n");
    sb.append("    candidateStarterUsers: ").append(toIndentedString(candidateStarterUsers)).append("\n");
    sb.append("    candidateStarterGroups: ").append(toIndentedString(candidateStarterGroups)).append("\n");
    sb.append("    allCaseElements: ").append(toIndentedString(allCaseElements)).append("\n");
    sb.append("    lifecycleListeners: ").append(toIndentedString(lifecycleListeners)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}
